﻿// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Cg Minimal shader" { // 定义Shader的名字，这个名字会出现控制面板上作为材质的shader程序索引,还可以通过加“/”来将shader程序归类

	Properties{

		[HDR] _Color("Color", Color) = (1,1,1,1)
		_Float("Range Float", Range(0,1)) = 0.5
		[PowerSlider(5)] _PowerSliderFloat("PowerSlider Float", Range(0,1)) = 0.5
		[IntRange] _IntRangeFloat("IntRange Float", Range(0,3)) = 1
		[Toggle]_ToggleFloat("Toggle Float", Range(0 , 1)) = 1
		[Enum(UnityEngine.Rendering.CullMode)]_EnumFloat("Enum Float", Float) = 1

		_Vector("Vector", Vector) = (0,0,0,0)

		_MainTex("2D", 2D) = "white" {}
	}

	//如：Custom/Cg Minimal shader
	SubShader { // 一个Shader有多个SubShader，Unity会自动选择最合适的
		Pass { // 一个SubShader有多个Pass块
			CGPROGRAM // Unity的Cg程序预编译命令

			// 定义一个顶点着色器程序名字为vert
			#pragma vertex vert 
			// 定义一个片段着色器程序名字为frag
			#pragma fragment frag

			// 顶点着色器程序，参数进行语义绑定 
			// POSITION为输入绑定，SV_POSITION为输出绑定
			float4 vert(float4 vertexPos : POSITION) : SV_POSITION
			{
				// 用内置的矩阵UNITY_MATRIX_MVP转变顶点着色器程序的输入数据vertexPos并返回这个转变之后的数据，之后它将作为片段着色器程序的输入参数 
				return UnityObjectToClipPos(vertexPos);
			}

			// 片段着色器，它的输入语义这里用了Void表示接受所有的类型，你还可以换成和顶点程序的输入一样的语义 float4 vertexPos : POSITION(SV_POSITION） 
			// 用COLOR进行输出语义绑定
			float4 frag(void) : COLOR 
			{
				return float4(1.0, 0.0, 0.0, 1.0);

			}

			ENDCG // 结束Cg程序的预编译命令
		}
	}
}